/*
 * FuncionesArchConfig.c
 *
 *  Created on: 25/09/2011
 *      Author: sk8julian
 */

#include "./includes/FuncionesArchConfig.h"
#include "./includes/variablesGlobales.h"
#include <stdlib.h>

 int buscaPalabraEnArchivoConfig(int *variableGlobal, char *palabraABuscar)
{
	 int tamanioArchivo;
	FILE *punteroDelArchivo;
	char *punteroContenidoArchivo;
	char *contenidoArchivo2;
	 int *variableAuxiliar;
	char bufferLog[100];

	variableAuxiliar=variableGlobal;
	punteroDelArchivo = fopen("../PPDconf.txt","r+");

	memset(bufferLog,'\0',sizeof(bufferLog));
	if (!punteroDelArchivo)
		{
		sprintf(bufferLog,"No se pudo abrir el archivo de configuracion\n");
		printf("%s\n",bufferLog);
		fclose(punteroDelArchivo);
		return 0;
		}
	else
		{
		fseek(punteroDelArchivo, 0, SEEK_END);
		tamanioArchivo = ftell(punteroDelArchivo);
		contenidoArchivo2 =(char *)calloc(1,(tamanioArchivo+1)*sizeof(char));
		rewind(punteroDelArchivo);

		if(fread(contenidoArchivo2,sizeof(char),tamanioArchivo+1,punteroDelArchivo))
			{
			contenidoArchivo2[tamanioArchivo]='\0';
			punteroContenidoArchivo =strstr(contenidoArchivo2,palabraABuscar);

			if(!punteroContenidoArchivo)
				{
				sprintf(bufferLog,"No se encontro la variable global en el archivo de configuracion\n");
				printf("%s\n",bufferLog);
				free(contenidoArchivo2);
				fclose(punteroDelArchivo);
				return 0;
				}
			else
				{
				punteroContenidoArchivo = strtok(punteroContenidoArchivo,"=");
				punteroContenidoArchivo = strtok(NULL," ");
				*variableAuxiliar=atoi(punteroContenidoArchivo);
				sprintf(bufferLog,"Se asigno a %s, el valor %d\n",palabraABuscar,atoi(punteroContenidoArchivo));
				printf("%s\n",bufferLog);
				}
			}
		else
			{
			printf("Error al leer el archivo de configuracion\n");
			free(contenidoArchivo2);
			fclose(punteroDelArchivo);
			return 0;
			}
		}
	free(contenidoArchivo2);
	fclose(punteroDelArchivo);
return 1;
}



 int buscaStringEnArchivoConfig(char *palabraABuscar)
{
	 int tamanioArchivo;
	FILE *punteroDelArchivo;
	char *punteroContenidoArchivo=NULL;
	char *variableAuxiliar=NULL;
	char *contenidoDelArchivo=NULL;
	char bufferLog[100];

	punteroDelArchivo = fopen("../PPDconf.txt","r+");
	memset(bufferLog,'\0',sizeof(bufferLog));

	if (!punteroDelArchivo)
		{
		sprintf(bufferLog,"Error al abrir el archivo para leer\n");
		printf("%s\n",bufferLog);
		fclose(punteroDelArchivo);
		return 0;
		}
	else
		{
		fseek(punteroDelArchivo, 0, SEEK_END);
		tamanioArchivo = ftell(punteroDelArchivo);
		contenidoDelArchivo =(char *)calloc(1,(tamanioArchivo+1)*sizeof(char));
		rewind(punteroDelArchivo);

		if(fread(contenidoDelArchivo,sizeof(char),(tamanioArchivo+1),punteroDelArchivo))
			{
			contenidoDelArchivo[tamanioArchivo]='\0';
			punteroContenidoArchivo =strstr(contenidoDelArchivo,palabraABuscar);

			if(!punteroContenidoArchivo)
				{
				sprintf(bufferLog,"No se encontro la variable global en el archivo de configuracion\n");
				printf("%s\n",bufferLog);
				free(contenidoDelArchivo);
				fclose(punteroDelArchivo);
				return 0;
				}
			else
				{
				punteroContenidoArchivo = strtok(punteroContenidoArchivo,"=");
				punteroContenidoArchivo = strtok(NULL,";");
				variableAuxiliar=punteroContenidoArchivo;

				//Aca se rellenan las variables que se leen del archivo


				memset(direccionIPRaid,'\0',sizeof(direccionIPRaid));
				strcpy(direccionIPRaid,variableAuxiliar);
				sprintf(bufferLog,"Se asigno a %s, el valor %s",palabraABuscar,direccionIPRaid);
				printf("%s\n",bufferLog);
				free(contenidoDelArchivo);
				}
			}
		else
			{
			printf("Error al leer el archivo de configuracion\n");
			fclose(punteroDelArchivo);
			free(contenidoDelArchivo);
			return 0;
			}
		}
	fclose(punteroDelArchivo);
return 1;
}

  int buscaAlgoritmo(char *palabraABuscar)
  {
  	 int tamanioArchivo;
  	FILE *punteroDelArchivo;
  	char *punteroContenidoArchivo=NULL;
  	char *variableAuxiliar=NULL;
  	char *contenidoDelArchivo=NULL;
  	char bufferLog[100];

  	punteroDelArchivo = fopen("../PPDconf.txt","r+");
  	memset(bufferLog,'\0',sizeof(bufferLog));

  	if (!punteroDelArchivo)
  		{
  		sprintf(bufferLog,"Error al abrir el archivo para leer\n");
  		printf("%s\n",bufferLog);
  		fclose(punteroDelArchivo);
  		return 0;
  		}
  	else
  		{
  		fseek(punteroDelArchivo, 0, SEEK_END);
  		tamanioArchivo = ftell(punteroDelArchivo);
  		contenidoDelArchivo =(char *)calloc(1,(tamanioArchivo+1)*sizeof(char));
  		rewind(punteroDelArchivo);

  		if(fread(contenidoDelArchivo,sizeof(char),(tamanioArchivo+1),punteroDelArchivo))
  			{
  			contenidoDelArchivo[tamanioArchivo]='\0';
  			punteroContenidoArchivo =strstr(contenidoDelArchivo,palabraABuscar);

  			if(!punteroContenidoArchivo)
  				{
  				sprintf(bufferLog,"No se encontro la variable global en el archivo de configuracion\n");
  				printf("%s\n",bufferLog);
  				free(contenidoDelArchivo);
  				fclose(punteroDelArchivo);
  				return 0;
  				}
  			else
  				{
  				punteroContenidoArchivo = strtok(punteroContenidoArchivo,"=");
  				punteroContenidoArchivo = strtok(NULL,";");
  				variableAuxiliar=punteroContenidoArchivo;

  				//Aca se rellenan las variables que se leen del archivo


  				memset(Algoritmo,'\0',sizeof(Algoritmo));
  				strcpy(Algoritmo,variableAuxiliar);
  				sprintf(bufferLog,"Se asigno a %s, el valor %s",palabraABuscar,Algoritmo);
  				printf("%s\n",bufferLog);
  				free(contenidoDelArchivo);
  				}
  			}
  		else
  			{
  			printf("Error al leer el archivo de configuracion\n");
  			fclose(punteroDelArchivo);
  			free(contenidoDelArchivo);
  			return 0;
  			}
  		}
  	fclose(punteroDelArchivo);
  return 1;
  }



   int cargarArchivoDeConfiguracion()
  {


  	if(buscaPalabraEnArchivoConfig(&PuertoDelRaid,"Puerto del Raid")
  			&& buscaPalabraEnArchivoConfig(&tiempoLectura,"Tiempo de Lectura")
  			&& buscaPalabraEnArchivoConfig(&tiempoEscritura,"Tiempo de Escritura")
  			&& buscaPalabraEnArchivoConfig(&numCabezas,"Cabezas")
  			&& buscaPalabraEnArchivoConfig(&numSecxPist,"SectoresxPista")
  			&& buscaPalabraEnArchivoConfig(&cilindros,"Cilindros")
  			&& buscaPalabraEnArchivoConfig(&PuertoPDD,"Puerto del PDD")
  			&& buscaPalabraEnArchivoConfig(&RPM,"RPM")
  			&& buscaPalabraEnArchivoConfig(&tiempoEntreCilindros,"Tiempo entre Cilindros")
  			&& buscaPalabraEnArchivoConfig(&N_Pasos_variable,"Cant de n Pasos")
  			&& buscaPalabraEnArchivoConfig(&consolaActiva,"Consola Activa")
  			&& buscaPalabraEnArchivoConfig(&CantidadDeRecorridoAMostrar,"Recorrido a mostrar en el Trace")
  			&&	buscaStringEnArchivoConfig("Direccion IP del Raid")
  			&&  buscaAlgoritmo("Algoritmo"))
  		{
  		printf("Finalizo correctamente el proceso del archivo de configuracion\n");

  		}
  	else
  		{
  		printf("El proceso del archivo de configuracion finalizo de forma inesperada\n");

  		return 0;
  		}
  return 1;
  }
